package com.osig.ec.cfca;

import java.io.FileInputStream;
import java.io.FileNotFoundException;



import cfca.paperless.client.bean.ChannelBean;
import cfca.paperless.client.bean.PdfBean;
import cfca.paperless.client.bean.SealUserInfo;
import cfca.paperless.client.bean.SignLocation;
import cfca.paperless.client.servlet.PaperlessClient;
import cfca.paperless.client.util.Base64;
import cfca.paperless.client.util.IoUtil;
import cfca.paperless.client.util.PaperlessUtil;
import cfca.paperless.client.util.StrategyUtil;

/**
 * @author 主要用于对pdf进行合成多媒体信息、客户电子签名、银行企业签章；如果有手写签名同一个pdf不能连续多次调用，否则pdf会报错。
 *         添加手写签名为PDF的内容。 以关键字进行签章签字的demo
 */
public class testCompoundSealAutoPdf_k {

	public static void main(String[] args) throws Exception {
		try {
			// 无纸化基本接口的访问地址URL
			PaperlessClient clientBean = new PaperlessClient(PaperlessConfig.url);

			/////////////////////////// 如下为加盖机构印章的策略/////////////////////////////////////////////////
			// 确定签章位置
			String keywordb = "甲方：";
			String locationStyleb = "R";
			int offsetXb = 10;
			int offsetYb = 0;
			SignLocation signLocationb = new SignLocation(keywordb, locationStyleb, offsetXb, offsetYb);
			// 只在第12页的相应位置签字
			signLocationb.setPage(12);
			// 初始化签章企业信息。由签章企业、签章地点、签章理由组成的签章企业信息
			String usernameb = "郑州银行";
			String sealLocationb = "郑州";
			String sealReasonb = "签合同";
			SealUserInfo sealUserInfob = new SealUserInfo(usernameb, sealLocationb, sealReasonb);
			// 印章代码
			String sealCode = "yz201711101645598";
			// 印章密码
			String sealPassword = "123456";
			// 通过印章编码、印章密码、签章者信息、签章地点创建生成签章策略
			String sealStrategyXml = StrategyUtil.createSealStrategyXml(sealCode, sealPassword, sealUserInfob,
					signLocationb);
			// 结合签章策略生成复合签章策略
			String compoundSealStrategyXml = "<List>" + sealStrategyXml + "</List>";

			// 多媒体数据
			String multiData = "";

			// 提取要批量签章的合同pdf文件
			byte[] pdfFile = IoUtil.read(new FileInputStream("D:\\zzbank.pdf"));
			// 文件存放路径，可以为空
			String outputFilePath = "ftp:auto";
			// 业务流水号，可以为空
			String bizSerialNo = "zzbank1234567890";
			// 业务类型，比如：开户、开通网银。在电子签章后台业务管理-业务类型功能进行设置，可用于对pdf进行分类，可以为空。
			String bizTypeCode = "";
			/* 创建新的pdfBeanXml */
			PdfBean pdfBean = new PdfBean(Base64.toBase64String(pdfFile), bizSerialNo, bizTypeCode, outputFilePath);
			String pdfBeanXml = PaperlessUtil.buildPdfBeanXml(pdfBean);

			// 通过渠道编码创建新的业务渠道Xml
			String channelBeanXml = new ChannelBean(PaperlessConfig.channelCode).toString();

			// 通过pdfBeanXml、多媒体数据、复合印章策略Xml、柜员、渠道Xml调用接口完成pdf的复合签章
			byte[] sealedPdf = clientBean.compoundSealAutoPdf(pdfBeanXml, multiData, compoundSealStrategyXml,
					PaperlessConfig.operatorCode, channelBeanXml);
			System.out.println(new String(sealedPdf, "UTF-8"));

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
